const http = require("http");
const path = require("path");
const {URL} = require("url");
const fs = require("fs");


/*
    本次实验 ， 实现了前后端的交互 ， 就是说从前段输入数据 ， 然后由后端收到数据 ， 之后再通过后端对前端的页面进行更改
        这个就是说前端发送了请求 ， 然后后端通过了请求的路径然后判断需要做的操作 ， 比如说前端通过fetch发送了http://192.168.42.166:3000/api/adddata ， 这样的路径 ， 然后由后端进行解析 ，之后就是对数据进行添加
        前端如果想要传递传递数据， 可以通过get和post方法
            fetch(url , {method:"GET"})
                如果是get方法 ， 那么就数据就是在url中书写的书写的格式就是http://192.168.42.166:3000/?id=tesh&name=dwhi
                就是数据是键值对的形式 ， 数据之间使用&链接 ， 然后可以在后端通过querystring ， 对齐进行数据格式化 ， 从而拿到相应的数据
            fetch(url , {method:"POST" , body: "data"})
                如果是POST方法， 那么就需要将数据放在body中 ， 然后在后端通过对于req的data事件进行监听就可以获取该数据 
*/ 

function staticSend(urlObj , res) {
    // let filepath = path.join(__dirname , );
    switch(urlObj.pathname) {
        case '/static' :
            console.log(123456);
            let fileContent = fs.readFileSync(path.join(__dirname , "index.html"));
            res.writeHead(200 , {"Content-Type": "text/html"});
            res.end(fileContent);
            break;
    }
}
let dataList = [];
http.createServer((req, res) => {
    let urlObj = new URL(req.url , "http://192.168.42.166:3000/");
    console.log(urlObj);
    console.log(urlObj.pathname.indexOf("/static"));
    if(urlObj.pathname.indexOf("/static") > -1) {
        console.log(123456);
        staticSend(urlObj , res);
    } else if(urlObj.pathname.indexOf("/api") > -1) {
        dataSend(urlObj, req,  res);
    }
}).listen(3000);

//数据处理接口
function dataSend(urlObj , req,  res) {
    switch(urlObj.pathname) {
        case "/api/adddata":
            addData(req, res, urlObj);
            break;
        case "/api/list":
            getData(req, res, urlObj);
            break;
        case "/api/del":
            delData(req, res, urlObj);
            break;
    }
}

function delData(req , res, urlObj) {
    let id = ''
    req.on("data" , (chunk) => {
        id += chunk;
    })
    req.on("end" , () => {
        console.log(id);
        dataList = dataList.filter(item => item.id != id);
        console.log(dataList);
        res.end(JSON.stringify(dataList));
    })
}

//添加数据
function addData(req, res , urlObj) {
    let str = '';
    req.on("data" , (chunk) => {
        str += chunk;
    })
    req.on("end" , () => {
        let dataObj = JSON.parse(str);
        if(dataObj.msg) {
            dataObj.id = new Date().getTime();
            dataList.push(dataObj);
            res.end(JSON.stringify(dataList));
        }
    })
    // res.end(123);
}

function getData(req, res , urlObj) {
    let dataStr = JSON.stringify(dataList);
    res.end(dataStr);
}